公司主页 文档归类 淘宝

软件架构

开发模型

下图展示CC2640R2F支持的两种开发模型,本文讲解都集中在图一,也就是整个ble协议栈和应用都工作在一个CC2640R2F的单SOC解决方案。

图4. 单设备处理器和简单网络处理器配置

SDK 平台

CC2640R2 BLE5.0 开发环境搭建我们详细讲解了SDK的下载、安装。整个SDK包含了我们蓝牙协议、CC2640R2F外设、TI-RTOS环境、编译链接组件等一系列软件工具集,如下图:

图5. 低功耗蓝牙协议栈开发系统

其中:

BLE软件架构

CC2640R2F低功耗蓝牙软件环境由以下部分组成:

TI-RTOS是一个实时的,抢占型的多线程操作系统,利用任务同步运行程序。应用程序和低功耗蓝牙协议栈在RTOS中都作为单独的任务实现。低功耗蓝牙协议栈任务具有最高优先级。ICALL的消息传递机制用于应用程序和协议栈之间的消息交互。
图6. 软件架构示例

目录结构

默认SDK安装位置为:C:\ti\simplelink_cc2640r2_sdk_x_xx_xx_xx

BLE5.0SDK 路径 描述
docs 以上SDK平台所TI-RTOS、蓝牙开发、DriveLib全部相关的文档
examples BLE5.0、BLE4.2、TI-RTOS操作系统Sys/bios相关驱动、CC2640R2F外设驱动相关例程
Kernel TI-RTOS内核源码、组件
source BLE4.2.BLE5.0协议栈相关代码、库文件,TI-RTOS相关驱动,软件中间件
tools 类似BTool相关的工具

Examples

examples\floder包含BLE5-Stack、TI-RTOS内核和TI-RTOS驱动程序的示例源文件。支持SimpleLink CC2640R2 SDK示例的所有源代码可以在examples\rtos\CC2640R2_LAUNCHXL\中找到。每个产品的示例可以在其各自的文件夹中找到。

Exampls 描述
ble5stack BLE5.0相关全部例程 例如工作外设相关的simple_peripherl
blestack BLE4.2相关全部例程 例如工作外设相关的simple_peripherl
demos 工程模板,参考它实现你的产品工程
drivers CC2640R2F IO、Uart、SPI、ADC等常用外设编程
sysbios 内核相关的时钟、信号量、内存管理等例程

IAR示例作为.eww项目文件直接双击使用的,而CCS项目是导入的。

源码

source\ti\ folder包含着BLE5-Stack,TI-RTOS驱动程序和各种共享模块的库和源文件。它们如CC2640R2F SDK’s source\ti\ directory所示,可以在各自的文件夹中找到。

表5.CC2640R2F SDK’s source\ti\directory

工程管理和编译选项

熟悉TI早期的 BLE4.0/4.1 CC254x系列蓝牙协议栈的开发者,对OSAL一定不陌生,一个简单任务管理的操作系统抽象层完成8051内核对整个蓝牙协议栈的裸机实现。升级Cortex-M3 的 CC2640R2F,和基于TI-RTOS实时操作系统环境,TI保留了原来的OSAL对协议栈分层任务管理,保持了CC254x/CC2640蓝牙协议栈的统一维护。基于这种兼容设计,所以TI从工程管理区分了OSAL管理的Stack,以及基于TI-RTOS的App。

如上图所示,打开 simple_peripheral 工作空间,cc264042lp_app和cc2640lp_stack分别对应基于TI-RTOS的应用工程,和基于OSAL的协议栈工程。

App和Stack下面又对应着不同的编译置选项,这些编译选项对应着不同的编译、链接命令等。接下来我们详细理解对应 FlashROMFlashROM_StackLibrary。选项,FlashROM很好理解,前面的软件架构->存储系统我们已经详细了解过了,128KBFlash和128KBROM都服务于我们的应用和协议栈。FLASH_ROM表示一部分代码在Flash,一部分链接ROM里面,同样我们可以不链接ROM代码,直接将整整个代码发FLash方便调试,但是这里的_StackLibrary 要晦涩难懂的多, 该选项对应着TI对优化Flash空间的努力。

区别于CC2640和CC2640R2F的SDK,CC2640通过将App和Stack分别编译成两个可执行文件(FLash镜像文件)分别放在FLash首尾区域。
SplitImage FLash映射图

注意:注意以上FLash映射图,App和Stack的代码空间并不连续,分别在128KBFlash的首尾。

CC2640R2F增加配置选项尝试把Stack编译生成驱动库文件供App链接,也就是Stack编译后不再单独生成一个Flash镜像,而是一个*.a的库文件供App工程链接。最后生成一个可执行文件。

Lirary  FLash映射图

接下来,我们详细对比这两种方式编译选项。

分离镜像配置 (FlashROM)

与之前CC2640的BLE-Stack版本一样,应用程序和协议栈以两个单独的项目分别生成两个单独的镜像。这两个镜像文件占据单独的,不重叠的Flash页面。分离镜像的配置在某些场景中是有意义的,例如在OAD中独立管理应用程序或协议栈镜像下载。分离镜像项目具有以下特性:

协议栈编译成库文件配置(FlashROM_StackLibrary)

协议栈可以编译成静态库方式链接到应用程序。编译成库的协议栈可在编译选项上加StackLibrary来标识。编译成静态链接库的协议栈和应用程序可以共享连续的Flash页面,因此使用此编译选项可以为链接器提供更多的Flash空间优化。尽管这种编译配置节省了Flash空间,但是应用程序和协议栈的镜像文件不会分离。协议栈库选项具有以下属性:

注意:可能还是很多童鞋不能理解为什么这里节约了FLash空间,这个和Flash的Page 擦出写入有关系,如果编译成两个可执行文件方式,协议栈烧写到FLash后占据了某个Page(4KB)的1KB,应用程序的镜像文件再次烧写的时候剩下的3KB是不能再利用的。

项目的编译配置

SimpleLink CC2640R2 SDK的BLE5-Stack中的示例应用程序支持多个编译配置,以支持使用上述协议栈的编译类型。其他编译配置的创建是来支持开箱即用的RCOSC或OAD等功能。下表给出了BLE5-Stack中发现的编译配置及其彼此兼容性的摘要。

工程类型 工程编译配置 描述
App FlashROM 将应用独立编译成一个可执行文件,该配置选型下,对应的Stack工程也只能选择FlashRom方式,并且需要先下载Stack再下载App
App FlashROM_StackLibrary 配合使用Stack的FlashROM_Library方式,同样需要先将Stack编译成一个静态库,然后再编译App连接协议栈库文件
App FlashROM_StackLibrary_RCOSC 基于FlashROM_Library方式,使用内部RC代替外部低速晶振
App FlashROM_OAD_Offchip 基于FlashROM配置选型方式的外部Flash无线固件升级
Stack FlashROM 配合App的FalshROM编译选项,将Stack独立编译成一个可执行文件下载到Flash,需要先下载Stack再下载App
Stack FlashROM_Library 配合App的FlashROM_Library编译选项,将协议栈编译生成一个库文件。

BLE5.0的项目工程还并不完整,默认都支持了库文件编译方式,如果你需要更改工作空间到独立镜像编译方式,可以按照以下方式分别将协议栈和应用程序更改到独立镜像编译方式。

更改协议栈工程从库文件选项编译到独立镜像选项(IAR)

  1. 选择需要编译的Stack Project
  1. 打开项目属性
  1. 选择Options–>Output选项
  1. 转到C/C++ Compiler Options–>Preprocessor选项
  1. 转到Build Actions
  1. 转到Linker Options–>Extra Options选项
  1. 转到Debugger选项
    根据您使用的调试器重新配置调试器设置。TI的开发板通常使用TI XDS110仿真器调试器。

更改应用程序工程从库链接方式到独立镜像选项

  1. 选择需要编译的Application Project
  1. 编译时去掉StackLibrary IDE文件夹。
  1. 打开工程属性
  1. 转到 C/C++ Compiler Options–>Preprocessor选项
  1. 转到Linker Options–>Config选项卡
  1. 转到Linker Options –> Library选项卡
  1. 转到Linker Options–>Extra Options选项卡

加入我们

文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。

CC2640R2F&BLE5.0-乐控畅联 © Copyright 2017, 成都乐控畅联科技有限公司.